#lang sicp

(define (generate a b)
  (define (generate-iter a b ap bp)
    (cons `(if (= ,bp 0)
               ,ap
               (gcd ,bp (% ,ap ,bp)))
          (if (= b 0)
              `(,ap)
              (let ((ap_ bp)
                    (bp_ `(% ,ap ,bp)))
                (cons `(gcd ,ap ,bp) (generate-iter b (remainder a b) ap_ bp_))))))
  
  (generate-iter a b a b))

(generate 206 40)

;; 由于手写 1.20 的那个答案实在是太恶心，所以我写了一个程序来生成答案
;; 不过 `Exercise-1.20.md` 里的答案真的是我一点一点手写的 QwQ